package cn.bdqn.service.impl;

import cn.bdqn.domain.Base;
import cn.bdqn.domain.User;
import cn.bdqn.mapper.UserMapper;
import cn.bdqn.service.UserService;
import cn.bdqn.utils.MD5Util;
import cn.bdqn.utils.result.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

/**
 * @author dkj
 */
@Service("userService")
public class UserServiceImpl implements UserService {


    @Autowired
    UserMapper um;
    /**
     * 添加新用户
     * @param user 新建角色
     */
    @Override
    public void addUser(User user) {
        //密码加密
        user.setPwd(MD5Util.encode(user.getPwd()));
        //设置token
        user.setToken(UUID.randomUUID().toString());
        um.insertSelective(user);
    }

    /**
     * 更新角色
     * @param user 更新后的角色
     */
    @Override
    public void updateUser(User user) {
        //设置加密
        user.setPwd(MD5Util.encode(user.getPwd()));
        //设置token
        user.setToken(UUID.randomUUID().toString());
        um.updateByPrimaryKeySelective(user);
    }

    /**
     * 删除指定角色
     * @param id 指定的用户id
     */
    @Override
    public void deleteUserById(Integer id) {
        um.deleteByPrimaryKey(id);
    }

    /**
     * 根据指定的机构删除该机构下的所有角色
     * @param groupId
     */
    @Override
    public void deleteUserByGroupId(Integer groupId) {
        um.deleteByGroupId(groupId);
    }

    /**
     * 根据指定信息查询用户
     * @param user 封装了查询到信息的对象
     * @return
     */
    @Override
    public User selectUserByInfo(User user) {
        //密码加密
        user.setPwd(MD5Util.encode(user.getPwd()));
        return um.selectByPhoneAndPwdAndGroup(user);
    }

    @Override
    public User selectById(Integer id) {
        return um.selectByPrimaryKey(id);
    }

    /**
     * 判断用户是否存在 根据电话号码
     * @param phone 电话号码
     * @return true 存在    false不存在
     */
    @Override
    public Boolean selectUserByPhone(String phone) {
        User user = um.selectByPhone(phone);
        if (user != null){
            return true;
        }
        return false;
    }

    /**
     * 判断用户是否存在 根据邮箱
     * @param email 邮箱
     * @return true 存在      false不存在
     */
    @Override
    public Boolean selectUserByEmail(String email) {
        User user = um.selectByEmail(email);
        if (user != null){
            return true;
        }
        return false;
    }

    /**
     * 根据机构id查询角色 （分页）
     * @param startNum 起始页
     * @param groupId 机构
     * @return
     */
    @Override
    public Page<User> selectUsersByGroupId(Integer startNum,Integer pageSize, Integer groupId) {
        //开启分页 pageNum > 0 ? pageNum:1 判断当前页数是否大于0
        PageHelper.startPage(startNum > 0 ? startNum:1,pageSize);
        //查询全部数据
        List<User> users = um.selectUsersByGroupId(groupId);
        //分页
        PageInfo<User> userPageInfo = new PageInfo<User>(users);
        //封装分页数据
        Page<User> page = new Page<User>();
        //分页之后的数据
        page.setMenuList(userPageInfo.getList());
        //总记录数
        page.setTotalRecord((int)userPageInfo.getTotal());
        //返回封装的分页对象
        return page;
    }

    /**
     * 查询全部未禁用的用户
     * @return
     */
    @Override
    public List<User> queryAll() {
        return um.selectAll();
    }


}
